import axios from "axios";
import router from "@/router";

export const baseURL = "https://api.kuajiangjun.cn";
const instance = axios.create({
  baseURL,
  // timeout: 5000,
  // headers: {
  //     'Content-Type': 'application/json'
  // }
});
//请求拦截
instance.interceptors.request.use(
  (config) => {
    const kua_token = localStorage.getItem("kua_token"); // 从本地存储获取token，实际可能根据项目的登录认证机制来获取
    if (kua_token) {
      config.headers.kua_token = `${kua_token}`; // 将token添加到请求头的Authorization字段，格式可能根据后端要求调整
    }
    // 这里也可以添加代码显示加载动画，比如使用一些UI库提供的加载组件来控制显示隐藏
    return config;
  },
  (error) => {
    return Promise.reject(error); // 如果请求拦截出现错误，直接返回被拒绝的Promise，将错误传递下去
  }
);
//响应拦截
instance.interceptors.response.use(
  (response) => {
    // 可以在这里隐藏加载动画，和请求拦截器中显示加载动画配合使用
    console.log(response,"response");
    const { data, status } = response;
    if (data.code === "3000") {
      //跳转到登录
      localStorage.clear();
      if (router.currentRoute.path !== '/login') {
        // 使用router.push跳转到登录页面
        router.push('/login').catch(err => {
          // 如果出现NavigationDuplicated错误，则忽略它
          if (err.name !== 'NavigationDuplicated') {
            throw err;
          }
        });
      }
    }
    if (status === 200) {
      // 根据项目实际的成功状态码判断，这里假设200表示成功
      return data;
    } else {
      // 如果状态码不是200，可以在这里统一处理错误，比如弹出提示框等，然后返回一个被拒绝的Promise
      return Promise.reject(new Error("请求失败"));
    }
  },
  (error) => {
    // 处理响应出现的网络错误等情况，比如断网、服务器内部错误等，同样可以弹出错误提示，返回被拒绝的Promise
    // return Promise.reject(error);
  }
);

export default instance;
